package com.fce.fcesystem.mapper;

import com.fce.fcesystem.pojo.Menu;
import com.fce.fcesystem.pojo.Role;
import com.fce.fcesystem.pojo.RoleMenu;
import com.fce.fcesystem.pojo.User;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserMapper {
    /**
     * @description:新增新用户
     **/
    Integer insertUser(User user);

    /**
     * @description:用户 角色关联
     **/
    Integer insertUserRole(@Param("userId") Integer userId, @Param("roleId") Integer roleId);

    void updateUserInfo(@Param("userId") Integer userId, @Param("userName") String userName, @Param("email") String email, @Param("phone")String phone);

    /**
     * @根据查询条件查询用户
     **/
    List<User> selectUsers(String account);

    /**
     * @description:根据用户id查询用户
     **/
    User selectUserById(@Param("userId") Integer userId);

    /**
     * @description:根据用户名称查询用户
     **/
    User selectUserByAccount(String account);

    /**
     * @description:根据用户名称查询角色名
     **/
    User getUserByAccount(String account);

    /**
     * @description:根据用户id修改用户密码
     **/
    Integer updateUserPasswordById(@Param("userId")Integer userId,@Param("password")String password);

    /**
     * @查询所有管理员
     **/
    List<User> getAdmins(String name);

    Integer deleteUser(Integer userId);

    Integer deleteUserRole(@Param("userId") Integer userId, @Param("roleId") Integer roleId);

    /**
     * @修改头像
     **/
    Integer headUpload(@Param("href") String href,@Param("userName")String userName);

    /**
     * @编辑个人信息
     **/
    Integer updateUser(@Param("userId")Integer userId,@Param("userName")String userName,
                       @Param("email")String email,@Param("phone")String phone,@Param("roleName")String roleName);

    /**
     * @激活邮箱
     **/
    Integer emailLoad(@Param("emailState") int emailState,@Param("userName") String userName);

    /**
     * @保存邮箱验证码
     **/
    Integer updateUserKey(@Param("key") String key,@Param("userName")String userName);

    /**
     * 根据用户名查找角色
     * @param account
     * @return
     */
    User findRolesByAccount(String account);

    /**
     * 根据角色id查询权限列表
     * @param uid
     * @return
     */
    Role findPermsByRoleId(Integer uid);

    User selectUserByPhone(@Param("phone") String phone);

    List<Menu> getMenuByRoleId(@Param("roleId") Integer roleId);

    Menu getMenuById(@Param("id") Integer id);

    //查询父菜单
    Menu getParentMenuByParentId(@Param("parentId") Integer parentId);

    //查询子菜单
    List<Menu> getChildMenuById(@Param("id") Integer id);

    List<Menu> getChildMenuByParentId(@Param("parentId")Integer parentId, @Param("roleId")Integer roleId);

    List<RoleMenu> getPermissionList(@Param("roleName")String roleName);

    void deleteRole(@Param("roleId")Integer roleId);

    void deleteRoleMenu(@Param("menuId")Integer menuId, @Param("roleId")Integer roleId);

    Integer insertRole(@Param("role")Role role);

    void insertRoleMenu(@Param("menuId")Integer menuId, @Param("roleId")Integer roleId);

    void updateRole( @Param("role")Role role);

    Role getRoleByName(@Param("roleName") String roleName);

    List<Role> getAllRoles();

    List<Menu> getAllMenus();
}
